package nl.justobjects.pushlet.test;

import nl.justobjects.pushlet.core.Dispatcher;
import nl.justobjects.pushlet.core.Event;
import nl.justobjects.pushlet.core.SessionManager;

/**
 * 服务推送
 * @author 
 * @version 2016-11-23
 */
public class PushletManager  {
	
	public static PushletManager pushletManager = null;
	
	/**
	 * 获取PushletManager实例
	 */
	public static PushletManager getInstance(){
		if(pushletManager == null){
			pushletManager = new PushletManager();
		}
		
		return pushletManager;
	}
	
	/**
	 * 点对点推送
	 *  @param msg_event 推送事件名（前端绑定的事件）
	 *  @param userId 推送指定用户
	 *  @param msg_key 前端信息读取key
	 *  @param msg_content 推送的信息
	 * */
	public void unicast(String msg_event, String userId, String msg_key, String msg_content){
		if(SessionManager.getInstance().hasSession(userId)){
			//判断当前用户是否在线
			if(SessionManager.getInstance().getSession(false,userId) == null) return;
			//创建一个事件
            Event event = Event.createDataEvent(msg_event);
            //写入内容
            event.setField(msg_key, msg_content);
            //发送给指定用户
            Dispatcher.getInstance().unicast(event, userId); //向和msg_event名称匹配的事件的userId相同的 推送 
        }
	}
	
	/**
	 * 广播推送
	 *  @param msg_event 推送事件名（前端绑定的事件）
	 *  @param msg_key 前端信息读取key
	 *  @param msg_content 推送的信息
	 * */
	public void mlticast(String msg_event, String msg_key, String msg_content){
		//创建一个事件
		 Event  event = Event.createDataEvent(msg_event);   
         //写入内容
         event.setField(msg_key, msg_content);
         //发送给指定用户
		 Dispatcher.getInstance().multicast(event);  //向所有和msg_event名称匹配的事件推送 
	 }
}
